package domain.entities;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import javax.persistence.*;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import static javax.persistence.GenerationType.IDENTITY;

/**
 * Role entity. @author MyEclipse Persistence
 */
@Entity
@Table(name = "role", catalog = "bms")
public class Role implements java.io.Serializable, Comparable {


    public static final String PRINCIPAL_INVESTIGATOR = "Principal Investigator";
    public static final String SUB_INVESTIGATOR = "Sub-Investigator";
    public static final Integer ID_PRINCIPAL_INVESTIGATOR = -2;
    public static final Integer ID_SUB_INVESTIGATOR = -3;

    // Fields
    private Integer id;
    private String descripcion;
    private boolean siteStaff;
    private boolean bmsstaff;
    private Collection<MiembroBms> miembroBms;

    // Constructors

    /** default constructor */
    public Role() {
    }

    public Role(Integer id, String descripcion) {
        this.id = id;
        this.descripcion = descripcion;
    }

    /** full constructor */
    public Role(String descripcion,
                Set<MiembroBmsProtocolo> miembroBmsProtocolos){
        this.descripcion = descripcion;
    }

    // Property accessors
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Column(name = "descripcion")
    public String getDescripcion() {
        return this.descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    @Column(name = "sitestaff")
    public boolean getSiteStaff() {
        return siteStaff;
    }

    public void setSiteStaff(boolean siteStaff) {
        this.siteStaff = siteStaff;
    }
    @Column(name = "bmsstaff")
    public boolean getBmsstaff() {
        return bmsstaff;
    }

    public void setBmsstaff(boolean bmsstaff) {
        this.bmsstaff = bmsstaff;
    }


    @OneToMany(mappedBy = "role")
    @LazyCollection(LazyCollectionOption.FALSE)
    public Collection<MiembroBms> getMiembroBms() {
        return miembroBms;
    }

    public void setMiembroBms(Collection<MiembroBms> miembroBms) {
        this.miembroBms = miembroBms;
    }

    public boolean equals(Object o){
        Role otro = (Role)o;
        return this.id.equals(otro.id);
    }

    @Override
    public int compareTo(Object o) {
        Role otro = (Role)o;
        return this.descripcion.compareTo(otro.descripcion);
    }
}